package com.doitedu.day04.funcs

/**
 * @Date 22.6.23
 * @Created by HANGGE
 * @Description
 */
object _06Fold {
  def main(args: Array[String]): Unit = {
    val  ls  = List[Int](1,2,3,4,5)
    // 10-1)-2)-3)-4)-5  =   -23
    println(ls.foldLeft(10)(_ - _))
    // 1-(2-(3-(4-(5-10   = -7
    println(ls.foldRight(10)(_ - _))
    
    //reduce           (op: (A1, A1) => A1): A1
   // fold  (z: A1)    (op: (A1, A1) => A1): A1
    /**
     * 原来的方法只有一个参数类型列表
     * 有两个参数类型列表的方法  柯里化的方法
     * 参数列表1  默认值(初始值) 参与一次计算  foldLeft  foldRight 默认值是在计算的第一个元素上
     * 10 + 1  ) +2 ) + 3 ) +4)  +5 foldLeft
     * 1-(2-(3-(4-(5-10   foldRight
     * 参数列表2  计算逻辑  和reduce一样
     */
      // 10 + 1  ) +2 ) + 3 ) +4)  +5
      val i = ls.fold(10)(_ + _)
      println(i)
      // 1-(2-(3-(4-(5-10
    println(ls.foldRight(10)(_ - _))
  }

/*  def  myf(a:A , b:B): Unit ={

  }*/
  // 有利于数据的推演  可以从类型A  推演出数据类型B
  def  myf(a:A)(b:a.B): Unit ={

  }
}



class  A {
  class  B
  val x :Int = 21
}


